package com.shenfa.service.systemManager.role;

import java.util.*;

import org.springframework.beans.factory.annotation.Autowired;

import com.shenfa.bean.Emprole;
import com.shenfa.bean.TreeNode;
import com.shenfa.dao.EmproleDao;
import com.shenfa.dao.systemManager.depart.DepartDao;
import com.shenfa.dao.systemManager.function.FunctionDao;
import com.shenfa.dao.systemManager.organization.OrganizationDao;
import com.shenfa.dao.systemManager.role.RoleDao;
import com.shenfa.service.systemManager.role.RoleService;
import com.shenfa.util.sequence.SequenceUtil;

public class RoleService{

	@Autowired
	private RoleDao roleDao;
	@Autowired
	private OrganizationDao organizationDao;
	@Autowired
	private DepartDao departDao;
	@Autowired
	private EmproleDao emproleDao;
	@Autowired
	private FunctionDao functionDao;
	@Autowired
	private SequenceUtil sequenceUtil;
	
	/**
	 * 根据部门查找所属角色
	 * @return
	 */
	public List<Emprole> getList(Emprole emp) {
		//获取部门下的所有角色
		return emproleDao.getList(emp);
	}

	public List<Emprole> getEmproleList(String id, int start, int limit) {
		//获取部门下的所有角色
		return emproleDao.getEmproleList(id,start,limit);
	}
	public int getCount(String id) {
		//获取部门下的所有角色总数
		return emproleDao.getCount(id);
	}
	
	/**
	 * 增加一个新角色
	 * @param role
	 * @return
	 */
	public String addRole(Emprole role) {
		String rid=sequenceUtil.getSequence(5);
		if(null==rid){
			return "";
		}
		role.setRid(rid);
		//增加角色的操作
		String ret=roleDao.addRole(role);
		//如果有功能设置
		if(null!=role.getRolefun() && !"".equals(role.getRolefun())){
			String[] funs=role.getRolefun().split("\\|");
			if(funs.length>0){
				//删除所属的所有功能
				int i_res=functionDao.delFuncByRoleId(role.getRid());
				Map<String,String> temp=new HashMap<String,String>();
				temp.put("rid",role.getRid());
				//遍历要加入的权限，添加到数据库中
				for(String s:funs){
					temp.put("fid",s);
					functionDao.addFuncByRoleId(temp);
				}
			}
		}
		return "";
	}
	
	public String updataRole(Emprole emprole){
		//修改角色信息
		roleDao.updata(emprole);
		//如果有功能设置
		if(null!=emprole.getRolefun()){
			functionDao.delFuncByRoleId(emprole.getRid());
			if("".equals(emprole.getRolefun().trim())){
				return "";
			}
			String[] funs=emprole.getRolefun().split("\\|");
			if(funs.length>0){
				//删除所属的所有功能
				Map<String,String> temp=new HashMap<String,String>();
				temp.put("rid",emprole.getRid());
				//遍历要加入的权限，添加到数据库中
				for(String s:funs){
					temp.put("fid",s);
					functionDao.addFuncByRoleId(temp);
				}
			}
		}
		return "";
	}
	

	public List<TreeNode> getTree(String id){
		//获取指定机构下的部门
		List<TreeNode> list2= departDao.getTree(id);
		//获取指定机构下的机构
		List<TreeNode> list1=organizationDao.getTree(id);
		if(null==list2){
			list2=new ArrayList<TreeNode>();
		}
		//合并集合
		list2.addAll(list1);
		return list2;
	}
	
	public List<TreeNode> getChildTree(String id){
		List<TreeNode> list1=organizationDao.getChildTree(id);
		return list1;
	}
	
	/**
	 * 删除一个角色
	 * @param rid
	 * @return
	 */
	public int delRole(String rid) {
		List<String> list = emproleDao.selectRoleByRid(rid);
		if(list.size() == 0) {
			 roleDao.delRole(rid);
			 emproleDao.delRoleByRid(rid);
		 return 0;
		} else {
			return list.size();
		}
		
	}
	/**
	 * 根据部门查询角色信息
	 * @param did
	 * @return
	 */
	public List<Emprole> listRoleByDid(String did){
		return emproleDao.listRoleByDid(did);
	}

	/**
	 * 验证角色名是否存在
	 * @param role
	 * @return
	 */
	public String checkRoleName(Emprole role) {
		return emproleDao.checkRoleName(role);
	}

	/**
	 * 验证角色是否绑定用户
	 * @param role
	 * @return
	 */
	public String checkDelRole(Emprole role) {
		return emproleDao.checkDelRole(role);
	}
}
